<?php
if(!defined('_FORMATING_COMPONENT_')){
    define('_FORMATING_COMPONENT_','FormatingComponent');
    class FormatingComponent extends Object {
        var $name = 'Formating';

        var $days = array('Domingo', 'Lunes', 'Martes', 'Miércoles', 'Jueves', 'Viernes', 'Sábado');

        function numeroControl($numero = 0, $depo = 0){
                $numero = substr(strval($numero),0,9);
                $numero = str_repeat('0', 8 - strlen($numero)).$numero;
                $depo = substr(strval($depo),0,2);
                $depo = str_repeat('0', 2 - strlen($depo)).$depo;
                return $depo.$numero;
        }

        function fecha($fecha='', $separador='-', $formatoFecha='d/m/Y'){
                if (strpos($fecha, ' ')>0)
                                $fecha = substr($fecha, 0, strpos($fecha, ' '));
                list($year, $mon, $day) = explode($separador,$fecha);
                return date($formatoFecha, mktime(0, 0, 0, $mon, $day, $year));
        }

        function diaSemana($date, $sep = '/'){
                if (strpos($date, ' ')>0)
                    $date = substr($date, 0, strpos($date, ' '));
                list($year, $mon, $day) = explode($sep, $date);
                $w = date('w', mktime(0, 0, 0, $mon, $day, $year));
                return $this->days[$w];
        }

        function reverseFecha($fecha='', $separador='/', $formatoFecha='Y-m-d'){
                if (strpos($fecha, ' ')>0)
                        $fecha = substr($fecha, 0, strpos($fecha, ' ')-1);
                list($day, $mon, $year) = explode($separador,$fecha);

                return date($formatoFecha, mktime(0, 0, 0, $mon, $day, $year));
        }

        function restaFechas($dFecIni, $dFecFin){
                $dFecIni = str_replace('-','',$dFecIni);
                $dFecIni = str_replace('/','',$dFecIni);
                $dFecFin = str_replace('-','',$dFecFin);
                $dFecFin = str_replace('/','',$dFecFin);

                ereg( '([0-9]{1,2})([0-9]{1,2})([0-9]{2,4})', $dFecIni, $aFecIni);
                ereg( '([0-9]{1,2})([0-9]{1,2})([0-9]{2,4})', $dFecFin, $aFecFin);

                $date1 = mktime(0,0,0,$aFecIni[2], $aFecIni[1], $aFecIni[3]);
                $date2 = mktime(0,0,0,$aFecFin[2], $aFecFin[1], $aFecFin[3]);

                return round(($date2 - $date1) / (60 * 60 * 24));
        }

        function sumaFechas($givendate,$day=0,$mth=0,$yr=0) {
                $cd = strtotime($givendate);
                $newdate = date('Y-m-d h:i:s', mktime(date('h',$cd),
                                date('i',$cd), date('s',$cd), date('m',$cd)+$mth,
                                date('d',$cd)+$day, date('Y',$cd)+$yr));
                return $newdate;
        }

        function menorQueFechas($date1, $date2){
                $cd1 = strtotime($date1);
                $cd2 = strtotime($date2);
                return $cd1 < $cd2;
        }

        function mayorQueFechas($date1, $date2){
                $cd1 = strtotime($date1);
                $cd2 = strtotime($date2);
                return $cd1 > $cd2;
        }

        function menorIgualQueFechas($date1, $date2){
                $cd1 = strtotime($date1);
                $cd2 = strtotime($date2);
                return $cd1 <= $cd2;
        }

        function mayorIgualQueFechas($date1, $date2){
                $cd1 = strtotime($date1);
                $cd2 = strtotime($date2);
                return $cd1 >= $cd2;
        }

        function num2letras($num, $fem = false, $dec = true){
                //if (strlen($num) > 14) die("El n?mero introducido es demasiado grande");
                $matuni[2]  = "dos";
                $matuni[3]  = "tres";
                $matuni[4]  = "cuatro";
                $matuni[5]  = "cinco";
                $matuni[6]  = "seis";
                $matuni[7]  = "siete";
                $matuni[8]  = "ocho";
                $matuni[9]  = "nueve";
                $matuni[10] = "diez";
                $matuni[11] = "once";
                $matuni[12] = "doce";
                $matuni[13] = "trece";
                $matuni[14] = "catorce";
                $matuni[15] = "quince";
                $matuni[16] = "dieciseis";
                $matuni[17] = "diecisiete";
                $matuni[18] = "dieciocho";
                $matuni[19] = "diecinueve";
                $matuni[20] = "veinte";
                $matunisub[2] = "dos";
                $matunisub[3] = "tres";
                $matunisub[4] = "cuatro";
                $matunisub[5] = "quin";
                $matunisub[6] = "seis";
                $matunisub[7] = "sete";
                $matunisub[8] = "ocho";
                $matunisub[9] = "nove";

                $matdec[2] = "veint";
                $matdec[3] = "treinta";
                $matdec[4] = "cuarenta";
                $matdec[5] = "cincuenta";
                $matdec[6] = "sesenta";
                $matdec[7] = "setenta";
                $matdec[8] = "ochenta";
                $matdec[9] = "noventa";
                $matsub[3]  = 'mill';
                $matsub[5]  = 'bill';
                $matsub[7]  = 'mill';
                $matsub[9]  = 'trill';
                $matsub[11] = 'mill';
                $matsub[13] = 'bill';
                $matsub[15] = 'mill';
                $matmil[4]  = 'millones';
                $matmil[6]  = 'billones';
                $matmil[7]  = 'de billones';
                $matmil[8]  = 'millones de billones';
                $matmil[10] = 'trillones';
                $matmil[11] = 'de trillones';
                $matmil[12] = 'millones de trillones';
                $matmil[13] = 'de trillones';
                $matmil[14] = 'billones de trillones';
                $matmil[15] = 'de billones de trillones';
                $matmil[16] = 'millones de billones de trillones';

                $num = trim((string)@$num);
                if ($num[0] == '-') {
                        $neg = 'menos ';
                        $num = substr($num, 1);
                } else
                        $neg = '';
                while ($num[0] == '0')
                        $num = substr($num, 1);
                if ($num[0] < '1' or $num[0] > 9)
                        $num = '0' . $num;
                $zeros = true;
                $punt = false;
                $ent = '';
                $fra = '';
                for ($c = 0; $c < strlen($num); $c++) {
                        $n = $num[$c];
                        if (! (strpos(".,'''", $n) === false)) {
                                if ($punt)
                                        break;
                                else {
                                        $punt = true;
                                        continue;
                                }
                        } else if (! (strpos('0123456789', $n) === false)) {
                                if ($punt) {
                                        if ($n != '0') $zeros = false;
                                        $fra .= $n;
                                } else
                                        $ent .= $n;
                        } else
                                break;
                }
                $ent = '     ' . $ent;
                if ($dec and $fra and ! $zeros) {
                        $fin = ' coma';
                        for ($n = 0; $n < strlen($fra); $n++) {
                                if (($s = $fra[$n]) == '0')
                                        $fin .= ' cero';
                                else if ($s == '1')
                                        $fin .= $fem ? ' una' : ' un';
                                else
                                        $fin .= ' ' . $matuni[$s];
                        }
                } else
                        $fin = '';
                if ((int)$ent === 0) return 'Cero ' . $fin;
                $tex = '';
                $sub = 0;
                $mils = 0;
                $neutro = false;
                while ( ($num = substr($ent, -3)) != '   ') {
                        $ent = substr($ent, 0, -3);
                        if (++$sub < 3 and $fem) {
                                $matuni[1] = 'una';
                                $subcent = 'as';
                        } else {
                                $matuni[1] = $neutro ? 'un' : 'uno';
                                $subcent = 'os';
                        }
                        $t = '';
                        $n2 = substr($num, 1);
                        if ($n2 == '00') {

                        } elseif ($n2 < 21)
                                $t = ' ' . $matuni[(int)$n2];
                        else if ($n2 < 30) {
                                $n3 = $num[2];
                                if ($n3 != 0) $t = 'i' . $matuni[$n3];
                                $n2 = $num[1];
                                $t = ' ' . $matdec[$n2] . $t;
                        } else {
                                $n3 = $num[2];
                                if ($n3 != 0) $t = ' y ' . $matuni[$n3];
                                $n2 = $num[1];
                                $t = ' ' . $matdec[$n2] . $t;
                        }
                        $n = $num[0];
                        if ($n == 1) {
                                $t = ' ciento' . $t;
                        } else if ($n == 5){
                                $t = ' ' . $matunisub[$n] . 'ient' . $subcent . $t;
                        } else if ($n != 0){
                                $t = ' ' . $matunisub[$n] . 'cient' . $subcent . $t;
                        }
                        if ($sub == 1) {
                        } else if (! isset($matsub[$sub])) {
                                if ($num == 1) {
                                        $t = ' mil';
                                }elseif ($num > 1){
                                        $t .= ' mil';
                                }
                        } else if ($num == 1) {
                                $t .= ' ' . $matsub[$sub] . '?n';
                        } else if ($num > 1){
                                $t .= ' ' . $matsub[$sub] . 'ones';
                        }
                        if ($num == '000') $mils ++;
                        else if ($mils != 0) {
                                if (isset($matmil[$sub])) $t .= ' ' . $matmil[$sub];
                                $mils = 0;
                        }
                        $neutro = true;
                        $tex = $t . $tex;
                }
                $tex = $neg . substr($tex, 1) . $fin;
                return ucfirst($tex);
        }

        function curr2letras($num = null, $moneda = null){
                $dec = number_format($num - intval($num), 2, '.', '');
                if ($dec > 0){
                        $dec = substr($dec, 2);
                } else $dec = '00';
                $val = $this->num2letras($num, false, false);
                return $val.'  y '.$dec.'/100 '.$moneda;
        }
        ##################################################################
        /* formato de fechas de numeros aletras*/
        function obtenermes($nmes){
                switch($nmes) {
                        case "01": $mes = "Enero"; 		break;
                        case "02": $mes = "Febrero"; 	break;
                        case "03": $mes = "Marzo"; 		break;
                        case "04": $mes = "Abril"; 		break;
                        case "05": $mes = "Mayo"; 		break;
                        case "06": $mes = "Junio";      break;
                        case "07": $mes = "Julio";     	break;
                        case "08": $mes = "Agosto";		break;
                        case "09": $mes = "Septiembre"; break;
                        case "10": $mes = "Octubre"; 	break;
                        case "11": $mes = "Noviembre"; 	break;
                        case "12": $mes = "Diciembre"; 	break;
                }
                return $mes;
        }
        /* clase para obtener el dia correoto dependiendo de la fecha */
        function semana($fecha, $texto = 1){
           list($ano,$mes,$dia) = explode("-",$fecha);
                $numerodiasemana = date('w', mktime(0,0,0,$mes,$dia,$ano));
                 if ($texto == 0)
                   return $numerodiasemana;
				 switch($numerodiasemana)
                 {
                        case 0: return "Domingo";
                        case 1: return "Lunes";
                        case 2: return "Martes";
                        case 3: return "Miercoles";
                        case 4: return "Jueves";
                        case 5: return "Viernes";
                        case 6: return "Sabado";
                 }
        }
        /* clase para calcular cuantos dias tiene el mes escogido */
        function dias($mes){
           switch ($mes)
           {
                   // 31 dias
                         case 1: case 3: case 5:
                         case 7: case 8: case 10:
                         case 12: return 31;
                         // 30 dias
                         case 4: case 6: case 9:
                         case 11: return 30;
                         // 28 dias
                         case 2: return 28;
           }
        }
        ////terminamos el dia
        /* clase para ver cuantos dias resta hasta ese mes */
        function sumames($mes1,$mes2){
           $suma = 0;
           if ($mes1 <= $mes2)
                   for ($mes=$mes1; $mes < $mes2; $mes++)
                                        $suma += dias($mes);
                 else
                         for ($mes=$mes1; $mes > $mes2; $mes--)
                                        $suma -= dias($mes);

                 return $suma;
        }
        ////termino esta clase de reta para le mes
        /* clase para sumar dias */
        function caduca($fecha){
                $cad 	= explode ("-",$fecha);
                $diahoy	= $cad[2] + 10;
                $meshoy = $cad[1];
                $anio	= $cad[0];
                // mira si la fecha del dia es mayo a los del total del mes
                if($diahoy > $this->dias($cad[1])) {
                        //resto
                        $nuevodia = $diahoy - dias($cad[1]);
                        $nuevomes = $meshoy+1;
                        // si los resultados son menores que 10 para poner 0 adelante
                        if((strlen($nuevodia)==1)){
                                $nuevodia1 = "0".$nuevodia;
                        //caso contrario dejo normal los resultado
                        }else{
                                $nuevodia1 = $nuevodia;
                        }
                }else{
                        $nuevodia1 = $diahoy;
                        $nuevomes = $meshoy;
                }

                return $anio ."-". $nuevomes1 ."-". $nuevodia1;
        }
        /* clase para trasladar los la fecha a (2009-01-05)"Martes, 05 de Enero del 2010" */
        function convertirfecha($fecha){

                $buscar=strpos($fecha,'/');
                if($buscar){
                        $separate = '/';
                }else{
                        $separate = '-';
                }
                $see = strstr($fecha, $separate);
                $restar = 10-strlen($see);
                if($restar==4){
                        $data = explode($separate,$fecha);
                        $newFecha = $data[2].$separate.$data[1].$separate.$data[0];
                }else{
                        $newFecha = $fecha;
                }
                $cf = explode ($separate,$newFecha);
                return $cf[0] ." de ".$this->obtenermes($cf[1]) ." del ". $cf[2] ;
        }
        /* clase para trasladar los la fecha a (2009-01-05)"Martes, 05 de Enero del 2010" */
        function convfecha($fecha){
                $buscar=strpos($fecha,'/');
                if($buscar){
                        $separate = '/';
                }else{
                        $separate = '-';
                }
                $cf = explode ($separate,$fecha);
                return $this->semana($fecha) .", ". $cf[2] ." de ".$this->obtenermes($cf[1]) ." del ". $cf[0] ;
        }
        /* clase para invertir fechas de formato d-m-A a A-m-d */
        function invfecha($fecha){
                $buscar=strpos($fecha,'/');
                if($buscar){
                        $separate = '/';
                }else{
                        $separate = '-';
                }
                $see = strstr($fecha, $separate);
                $restar = 10-strlen($see);
                if($restar==4){
                        $newFecha = $this->invfecha($fecha);
                }else{
                        $newFecha = $fecha;
                }

                $f = explode($separate,$newFecha);
                return $f[2].$separate. $f[1] .$separate. $f[0];
        }
		function changeFecha($fecha){
			$buscar=strpos($fecha,'/');
			if($buscar){
					$separate = '/';
			}else{
					$separate = '-';
			}
			$fecha = explode ($separate,$fecha);
			$contar= strlen($fecha[0]);
			if($contar==4){
				$fecha = $fecha[2].'/'.$fecha[1].'/'.$fecha[0];		
			}elseif($contar==2){
				$fecha = $fecha[0].'/'.$fecha[1].'/'.$fecha[2];		
			}else{
				$fecha = false;	
			}			
			return $fecha;
		}
		# fecha1 y fecha2 calculos entre dos fechas
		# $var=false si solo queremos los dias  caso contrario hasta el año..
		function cuantoHace($fechaInicio, $fechaActual,$var=false){
			$fechaInicio = $this->changeFecha($fechaInicio);
			$fechaActual = $this->changeFecha($fechaActual);			
			$diaActual = substr($fechaActual, 0, 2);
			$mesActual = substr($fechaActual, 3, 5);
			$anioActual = substr($fechaActual, 6, 10);
			$diaInicio = substr($fechaInicio, 0, 2);
			$mesInicio = substr($fechaInicio, 3, 5);
			$anioInicio = substr($fechaInicio, 6, 10);
			$result = '';
			$b = 0;
			$mes = $mesInicio-1;
			if($mes==2){
				if(($anioActual%4==0 && $anioActual%100!=0) || $anioActual%400==0){
					$b = 29;
				}else{
					$b = 28;
				}
			}else if($mes<=7){
				if($mes==0){
					$b = 31;
				}else if($mes%2==0){
			  		$b = 30;
			  	}else{
					$b = 31;
				}
			}else if($mes>7){
			  if($mes%2==0){
			  	$b = 31;
			  }else{
			  	$b = 30;
			  }
			}			
			if(($anioInicio>$anioActual) || ($anioInicio==$anioActual && $mesInicio>$mesActual) || 
			  ($anioInicio==$anioActual && $mesInicio == $mesActual && $diaInicio>$diaActual)){
			  	$result = "La fecha de inicio ha de ser anterior a la fecha Actual";
			}else{
				if($mesInicio <= $mesActual){
					$anios = $anioActual - $anioInicio;
					if($diaInicio <= $diaActual){
						$meses = $mesActual - $mesInicio;
						$dies = $diaActual - $diaInicio;
					}else{
						if($mesActual == $mesInicio){
							$anios = $anios - 1;
						}
						$meses = ($mesActual - $mesInicio - 1 + 12) % 12;
						$dies = $b-($diaInicio-$diaActual);
					}
			  	}else{
					  $anios = $anioActual - $anioInicio - 1;
					  if($diaInicio > $diaActual){
						  $meses = $mesActual - $mesInicio -1 +12;
						  $dies = $b - ($diaInicio-$diaActual);
					  }else{
						  $meses = $mesActual - $mesInicio + 12;
						  $dies = $diaActual - $diaInicio;
					  }
			  	}
				$var1 = '';
				$var2 = '';
				$var3 = '';
				if($anios>1){
					$var1 ="s";
				}
				if($meses>1){
					$var2 ="es";
				}
				if($dies>1){
					$var3 ="s";
				}
				$result =  "$anios A&ntilde;o$var1, $meses mes$var2 y $dies d&iacute;a$var3";
			  }
			return $result;					
		}	  
			
    }
}
?>